
typedef enum { GIOCA = 0, MERAVIGLIA, VENDI } Modo_gioca_carta;

typedef struct dettagli_acquisto{
	int destra;
	int sinistra;
	int banco;
} dettagli_acquisto;

typedef struct modi{
	Modo_gioca_carta azione;
	dettagli_acquisto paga;
	struct modi *succ;
} modi;

const int SOLO_COMMERCIABILI = 1, NON_SOLO_COMMERCIABILI = 0;

lista_risorse* calcola_possibili_risorse(carta* risorse_campo, lista_risorse* risorse_ereditate, int solo_commerciabili);
modi* modi_aggiungi_in_fondo(modi* output, modi* next);
modi* modi_possibili_acquisti(carta* da_giocare, costo_acquisto* costo_acquisto_risorse, lista_risorse* p_self, lista_risorse* p_sx, lista_risorse* p_dx, Modo_gioca_carta azione);
modi* modi_togli_costo_maggiore(modi* lista_modi, int soldi);
modi* calcola_modi_di_comprare(partita *game, int num_giocatore, carta *da_giocare, Modo_gioca_carta modo_di_giocare);
modi* modi_togli_tutti(modi* modo, Modo_gioca_carta scelta);
void gioca_carta(partita* game, giocatore* player, carta* card, modi* modo);
modi* modi_copia(modi* da_copiare);
modi* modi_append(modi* base, modi* alla_fine);
modi* modi_togli(modi* lista_modi, modi* da_togliere);
modi* modi_cerca_gratis(modi* lista_modi);
modi* modi_elimina_per_valore(modi* lista_modi, modi* da_togliere);
modi* modi_elimina_doppioni(modi* lista_modi);
void dealloca_modi(modi* modo);

